<!Doctype html>
<html>
<head>
	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1.0" />
	<title>Linux 常用命令学习 | 菜鸟教程</title>

  <meta name='robots' content='max-image-preview:large' />
<link rel='stylesheet' id='classic-theme-styles-css' href='../0/classic-themes.min.css?ver=6.2' type='text/css' media='all' />
<link rel="canonical" href="../w3cnote/linux-common-command-2.html" />
<meta name="keywords" content="Linux 常用命令学习">
<meta name="description" content="1、ls命令 就是 list 的缩写，通过 ls 命令不仅可以查看 linux 文件夹包含的文件，而且可以查看文件权限(包括目录、文件夹、文件权限)查看目录信息等等。  常用参数搭配：  ls -a 列出目录所有文件，包含以.开始的隐藏文件 ls -A 列出除.及..的其它文件 ls -r 反序排列 ls -t 以文件修改时间排序 ls -S 以文件大小排序 ls -h 以易读大小显示 ls -l 除了文件名之外，还将文件的权限、所有..">
		
	<link rel="shortcut icon" href="https://static.runoob.com/images/favicon.ico">
	<link rel="stylesheet" href="../0/style.css?v=1.170" type="text/css" media="all" />	
	<link rel="stylesheet" href="../0/font-awesome.min.css" media="all" />	
  <!--[if gte IE 9]><!-->
  <script src=""></script>
  <!--<![endif]-->
  <!--[if lt IE 9]>
     <script src=""></script>
     <script src=""></script>
  <![endif]-->
  <link rel="apple-touch-icon" href="https://static.runoob.com/images/icon/mobile-icon.png"/>
  <meta name="apple-mobile-web-app-title" content="菜鸟教程">
</head>
<body>

<!--  头部 -->
<div class="container logo-search">

  <div class="col search row-search-mobile">
    <form action="index.php">
      <input class="placeholder" placeholder="搜索……" name="s" autocomplete="off">
      
    </form>
  </div>

  <div class="row">
    <div class="col logo">
      <h1><a href="../">菜鸟教程 -- 学的不仅是技术，更是梦想！</a></h1>
    </div>
        <div class="col right-list"> 
    <button class="btn btn-responsive-nav btn-inverse" data-toggle="collapse" data-target=".nav-main-collapse" id="pull" style=""> <i class="fa fa-navicon"></i> </button>
    </div>
        
    <div class="col search search-desktop last">
      <div class="search-input" >
      <form action="//www.runoob.com/" target="_blank">
        <input class="placeholder" id="s" name="s" placeholder="搜索……"  autocomplete="off" style="height: 44px;">
      </form>
      
      </div>
    </div>
  </div>
</div>



<!-- 导航栏 -->
<div class="container navigation">
    <div class="row">
        <div class="col nav">
            

                        <ul class="pc-nav" id="note-nav">
                <li><a href="../">首页</a></li>
                <li><a href="../w3cnote">笔记首页</a></li>
                <li><a href="../w3cnote/android-tutorial-intro.html" title="Android 基础入门教程">Android</a></li>
                <li><a href="../w3cnote/es6-tutorial.html" title="ES6 教程">ES6 教程</a></li>
                <li><a href="../w3cnote/ten-sorting-algorithm.html" title="排序算法">排序算法</a></li>
                <li><a href="../w3cnote/hadoop-tutorial.html" title="Hadoop 教程">Hadoop</a></li>
                <li><a href="../w3cnote/zookeeper-tutorial.html" title="Zookeeper 教程">Zookeeper</a></li>
                <li><a href="../w3cnote/verilog-tutorial.html" title="Verilog 教程">Verilog</a></li>
                <li><a href="../w3cnote_genre/code" title="编程技术">编程技术</a></li> 
                <li><a href="../w3cnote_genre/coderlife" title="程序员人生">程序员人生</a></li>
                
                <!--<li><a href="javascript:;" class="runoob-pop">登录</a></li>
                
                
                        <li>
                <a style="font-weight:bold;" href="../linux/linux-tutorial.html#yunserver" target="_blank" onclick="_hmt.push(['_trackEvent', 'aliyun', 'click', 'aliyun'])" title="kkb">云服务器</a>
                </li>
                <li><a href="http://gk.link/a/104mQ" target="_blank" style="font-weight: bold;"onclick="_hmt.push(['_trackEvent', '极客时间', 'click', 'jike'])" title="我的圈子">极客时间</a></li>
            
                
                <li><a target="_blank" href="../shoppinglist" rel="nofollow">知识店铺</a></li> 
        -->
            </ul>
                        
              
            <ul class="mobile-nav">
                <li><a href="../w3cnote">首页</a></li>
                <li><a href="../w3cnote_genre/android" target="_blank" title="Android 基础入门教程">Android</a></li>
                <li><a href="../w3cnote/es6-tutorial.html" target="_blank" title="ES6 教程">ES6</a></li>
                <li><a href="../w3cnote_genre/joke" target="_blank" title="程序员笑话">逗乐</a></li>
                
                <a href="javascript:void(0)" class="search-reveal">Search</a> 
            </ul>
            
        </div>
    </div>
</div>


<!--  内容  -->
<div class="container main">
	<div class="row">

		<div class="col middle-column big-middle-column">
	 			<div class="article">
			<div class="article-heading">
				<h2>Linux 常用命令学习</h2>				<h3><em>分类</em> <a href="../w3cnote_genre/code" title="编程技术" >编程技术</a> </h3>
			</div>
			<div class="article-body note-body">
				<div class="article-intro">
					<h3>1、ls命令</h3>
<p>就是 list 的缩写，通过 ls 命令不仅可以查看 linux 文件夹包含的文件，而且可以查看文件权限(包括目录、文件夹、文件权限)查看目录信息等等。</p>

<p><strong>常用参数搭配：</strong></p>

<pre>ls -a 列出目录所有文件，包含以.开始的隐藏文件
ls -A 列出除.及..的其它文件
ls -r 反序排列
ls -t 以文件修改时间排序
ls -S 以文件大小排序
ls -h 以易读大小显示
ls -l 除了文件名之外，还将文件的权限、所有者、文件大小等信息详细列出来</pre>

<p><strong>实例：</strong></p>

<p>(1) 按易读方式按时间反序排序，并显示文件详细信息</p>

<pre>ls -lhrt</pre>

<p>(2) 按大小反序显示文件详细信息</p>

<pre>ls -lrS</pre>

<p>(3)列出当前目录中所有以"t"开头的目录的详细内容</p>

<pre>ls -l t*</pre>

<p>(4) 列出文件绝对路径（不包含隐藏文件）</p>

<pre>ls | sed "s:^:`pwd`/:"</pre>

<p>(5) 列出文件绝对路径（包含隐藏文件）</p>

<pre>find $pwd -maxdepth 1 | xargs ls -ld</pre>
<h3>2、cd 命令</h3>
<p>cd(changeDirectory) 命令语法：</p>
<pre>cd [目录名]</pre>
<p>说明：切换当前目录至 dirName。</p>

<p><strong>实例：</strong></p>

<p>（1）进入要目录</p>

<pre>cd /</pre>

<p>（2）进入 "home" 目录</p>

<pre>cd ~</pre>

<p>（3）进入上一次工作路径</p>

<pre>cd -</pre>

<p>（4）把上个命令的参数作为cd参数使用。</p>

<pre>cd !$</pre>

<h3>3、pwd 命令</h3>
<p>pwd 命令用于查看当前工作目录路径。</p>

<p><strong>实例：</strong></p>

<p>（1）查看当前路径</p>

<pre>pwd</pre>

<p>（2）查看软链接的实际路径</p>

<pre>pwd -P</pre>

<p>4、mkdir 命令</p>
mkdir 命令用于创建文件夹。

<p>可用选项：</p>
<ul><li>
<strong>-m</strong>: 对新建目录设置存取权限，也可以用 chmod 命令设置;
</li><li>
<strong>-p</strong>: 可以是一个路径名称。此时若路径中的某些目录尚不存在,加上此选项后，系统将自动建立好那些尚不在的目录，即一次可以建立多个目录。
</li></ul>
<p><strong>实例：</strong></p>

<p>（1）当前工作目录下创建名为  t的文件夹</p>

<pre>mkdir t</pre>

<p>（2）在 tmp 目录下创建路径为 test/t1/t 的目录，若不存在，则创建：</p>

<pre>mkdir -p /tmp/test/t1/t</pre>

<h3>5、rm 命令</h3>
<p>删除一个目录中的一个或多个文件或目录，如果没有使用 -r 选项，则 rm 不会删除目录。如果使用 rm 来删除文件，通常仍可以将该文件恢复原状。</p>

<pre>rm [选项] 文件&hellip;</pre>

<p><strong>实例：</strong></p>

<p>（1）删除任何 .log 文件，删除前逐一询问确认：</p>

<pre>rm -i *.log</pre>

<p>（2）删除 test 子目录及子目录中所有档案删除，并且不用一一确认：</p>

<pre>rm -rf test</pre>

<p>（3）删除以 -f 开头的文件</p>

<pre>rm -- -f*</pre>

<h3>6、rmdir 命令</h3>
<p>从一个目录中删除一个或多个子目录项，删除某目录时也必须具有对其父目录的写权限。</p>

<p><strong>注意</strong>：不能删除非空目录</p>

<p><strong>实例：</strong></p>

<p>（1）当 parent 子目录被删除后使它也成为空目录的话，则顺便一并删除：</p>

<pre>rmdir -p parent/child/child11</pre>

<h3>7、mv 命令</h3>
<p>移动文件或修改文件名，根据第二参数类型（如目录，则移动文件；如为文件则重命令该文件）。</p>

<p>当第二个参数为目录时，第一个参数可以是多个以空格分隔的文件或目录，然后移动第一个参数指定的多个文件到第二个参数指定的目录中。</p>

<p><strong>实例：</strong></p>

<p>（1）将文件 test.log 重命名为 test1.txt</p>

<pre>mv test.log test1.txt</pre>

<p>（2）将文件 log1.txt,log2.txt,log3.txt 移动到根的 test3 目录中</p>

<pre>mv llog1.txt log2.txt log3.txt /test3</pre>

<p>（3）将文件 file1 改名为 file2，如果 file2 已经存在，则询问是否覆盖</p>

<pre>mv -i log1.txt log2.txt</pre>

<p>（4）移动当前文件夹下的所有文件到上一级目录</p>

<pre>mv * ../</pre>

<h3>8、cp 命令</h3>
<p>将源文件复制至目标文件，或将多个源文件复制至目标目录。</p>

<p>注意：命令行复制，如果目标文件已经存在会提示是否覆盖，而在 shell 脚本中，如果不加 -i 参数，则不会提示，而是直接覆盖！</p>

<pre>-i 提示
-r 复制目录及目录内所有项目
-a 复制的文件与原文件时间一样</pre>

<p><strong>实例：</strong></p>

<p>（1）复制 a.txt 到 test 目录下，保持原文件时间，如果原文件存在提示是否覆盖。</p>

<pre>cp -ai a.txt test</pre>

<p>（2）为 a.txt 建立一个链接（快捷方式）</p>

<pre>cp -s a.txt link_a.txt</pre>

<h3>9、cat 命令</h3>
<p>cat 主要有三大功能：</p>

<p>1.一次显示整个文件:</p><pre>cat filename</pre>

<p>2.从键盘创建一个文件:</p><pre>cat &gt; filename</pre><p> 只能创建新文件，不能编辑已有文件。</p>

<p>3.将几个文件合并为一个文件:</p><pre>cat file1 file2 &gt; file</pre>
<ul><li>
-b 对非空输出行号</li><li>
-n 输出所有行号</li></ul>

<p><strong>实例：</strong></p>

<p>（1）把 log2012.log 的文件内容加上行号后输入 log2013.log 这个文件里</p>

<pre>cat -n log2012.log log2013.log</pre>

<p>（2）把 log2012.log 和 log2013.log 的文件内容加上行号（空白行不加）之后将内容附加到 log.log 里</p>

<pre>cat -b log2012.log log2013.log log.log</pre>

<p>（3）使用 here doc 生成新文件</p>

<pre>cat &gt;log.txt &lt;&lt;EOF
&gt;Hello
&gt;World
&gt;PWD=$(pwd)
&gt;EOF
ls -l log.txt
cat log.txt
Hello
World
PWD=/opt/soft/test</pre>

<p>（4）反向列示</p>

<pre>tac log.txt
PWD=/opt/soft/test
World
Hello</pre>

<h3>10、more 命令</h3>
<p>功能类似于 cat, more 会以一页一页的显示方便使用者逐页阅读，而最基本的指令就是按空白键（space）就往下一页显示，按 b 键就会往回（back）一页显示。</p>

<p><strong>命令参数：</strong></p>

<pre>+n      从笫 n 行开始显示
-n       定义屏幕大小为n行
+/pattern 在每个档案显示前搜寻该字串（pattern），然后从该字串前两行之后开始显示 
-c       从顶部清屏，然后显示
-d       提示&ldquo;Press space to continue，&rsquo;q&rsquo; to quit（按空格键继续，按q键退出）&rdquo;，禁用响铃功能
-l        忽略Ctrl+l（换页）字符
-p       通过清除窗口而不是滚屏来对文件进行换页，与-c选项相似
-s       把连续的多个空行显示为一行
-u       把文件内容中的下画线去掉</pre>

<p><strong>常用操作命令：</strong></p>

<pre>Enter    向下 n 行，需要定义。默认为 1 行
Ctrl+F   向下滚动一屏
空格键  向下滚动一屏
Ctrl+B  返回上一屏
=       输出当前行的行号
:f     输出文件名和当前行的行号
V      调用vi编辑器
!命令   调用Shell，并执行命令
q       退出more</pre>

<p><strong>实例：</strong></p>

<p>（1）显示文件中从第3行起的内容</p>

<pre>more +3 text.txt</pre>

<p>（2）在所列出文件目录详细信息，借助管道使每次显示 5 行</p>

<pre>ls -l | more -5</pre>

<p>按空格显示下 5 行。</p>

<h3>11、less 命令</h3>
<p>less 与 more 类似，但使用 less 可以随意浏览文件，而 more 仅能向前移动，却不能向后移动，而且 less 在查看之前不会加载整个文件。</p>

<p><strong>常用命令参数：</strong></p>

<pre>-i  忽略搜索时的大小写
-N  显示每行的行号
-o  &lt;文件名&gt; 将less 输出的内容在指定文件中保存起来
-s  显示连续空行为一行
/字符串：向下搜索&ldquo;字符串&rdquo;的功能
?字符串：向上搜索&ldquo;字符串&rdquo;的功能
n：重复前一个搜索（与 / 或 ? 有关）
N：反向重复前一个搜索（与 / 或 ? 有关）
-x &lt;数字&gt; 将&ldquo;tab&rdquo;键显示为规定的数字空格
b  向后翻一页
d  向后翻半页
h  显示帮助界面
Q  退出less 命令
u  向前滚动半页
y  向前滚动一行
空格键 滚动一行
回车键 滚动一页
[pagedown]： 向下翻动一页
[pageup]：   向上翻动一页</pre>

<p><strong>实例：</strong></p>

<p>（1）ps 查看进程信息并通过 less 分页显示</p>

<pre>ps -aux | less -N</pre>

<p>（2）查看多个文件</p>

<pre>less 1.log 2.log</pre>

<p>可以使用 n 查看下一个，使用 p 查看前一个。</p>

<h3>12、head 命令</h3>
<p>head 用来显示档案的开头至标准输出中，默认 head 命令打印其相应文件的开头 10 行。</p>

<p><strong>常用参数：</strong></p>

<pre>-n&lt;行数&gt; 显示的行数（行数为复数表示从最后向前数）</pre>

<p><strong>实例：</strong></p>

<p>（1）显示 1.log 文件中前 20 行</p>

<pre>head 1.log -n 20</pre>

<p>（2）显示 1.log 文件前 20 字节</p>

<pre>head -c 20 log2014.log</pre>

<p>（3）显示  t.log最后 10 行</p>

<pre>head -n -10 t.log</pre>

<h3>13、tail 命令</h3>
<p>用于显示指定文件末尾内容，不指定文件时，作为输入信息进行处理。常用查看日志文件。</p>

<p><strong>常用参数：</strong></p>

<pre>-f 循环读取（常用于查看递增的日志文件）
-n&lt;行数&gt; 显示行数（从后向前）</pre>

<p>（1）循环读取逐渐增加的文件内容</p>

<pre>ping 127.0.0.1 &gt; ping.log &amp;</pre><p>后台运行：可使用 jobs -l 查看，也可使用  fg 将其移到前台运行。 </p>

<pre>tail -f ping.log</pre><p>（查看日志）</p>

<h3>14、which 命令</h3>
<p>在 linux 要查找某个文件，但不知道放在哪里了，可以使用下面的一些命令来搜索：</p>

<pre>which     查看可执行文件的位置。
whereis 查看文件的位置。
locate  配合数据库查看文件位置。
find        实际搜寻硬盘查询文件名称。</pre>



<p>which 是在 PATH 就是指定的路径中，搜索某个系统命令的位置，并返回第一个搜索结果。使用 which 命令，就可以看到某个系统命令是否存在，以及执行的到底是哪一个位置的命令。</p>

<p><strong>常用参数：</strong></p>

<pre>-n 　指定文件名长度，指定的长度必须大于或等于所有文件中最长的文件名。</pre>

<p><strong>实例：</strong></p>

<p>（1）查看 ls 命令是否存在，执行哪个</p>

<pre>which ls</pre>

<p>（2）查看 which</p>

<pre>which which</pre>

<p>（3）查看 cd</p>

<pre>which cd（显示不存在，因为 cd 是内建命令，而 which 查找显示是 PATH 中的命令）</pre>

<p>查看当前 PATH 配置：</p><pre>echo $PATH</pre><p>或使用 env 查看所有环境变量及对应值</p>

<h3>15、whereis 命令</h3>
<p>whereis 命令只能用于程序名的搜索，而且只搜索二进制文件（参数-b）、man说明文件（参数-m）和源代码文件（参数-s）。如果省略参数，则返回所有信息。whereis 及 locate 都是基于系统内建的数据库进行搜索，因此效率很高，而find则是遍历硬盘查找文件。</p>

<p><strong>常用参数：</strong></p>

<pre>-b   定位可执行文件。
-m   定位帮助文件。
-s   定位源代码文件。
-u   搜索默认路径下除可执行文件、源代码文件、帮助文件以外的其它文件。</pre>

<p><strong>实例：</strong></p>

<p>（1）查找 locate 程序相关文件</p>

<pre>whereis locate</pre>

<p>（2）查找 locate 的源码文件</p>

<pre>whereis -s locate</pre>

<p>（3）查找 lcoate 的帮助文件</p>

<pre>whereis -m locate</pre>

<h3>16、locate 命令</h3>
<p>locate 通过搜寻系统内建文档数据库达到快速找到档案，数据库由 updatedb 程序来更新，updatedb 是由 cron daemon 周期性调用的。默认情况下 locate 命令在搜寻数据库时比由整个由硬盘资料来搜寻资料来得快，但较差劲的是 locate 所找到的档案若是最近才建立或 刚更名的，可能会找不到，在内定值中，updatedb 每天会跑一次，可以由修改 crontab 来更新设定值 (etc/crontab)。</p>

<p>locate 与 find 命令相似，可以使用如 *、? 等进行正则匹配查找</p>

<p><strong>常用参数：</strong></p>

<pre>-l num（要显示的行数）
-f   将特定的档案系统排除在外，如将proc排除在外
-r   使用正则运算式做为寻找条件</pre>

<p><strong>实例：</strong></p>

<p>（1）查找和 pwd 相关的所有文件(文件名中包含 pwd）</p>

<pre>locate pwd</pre>

<p>（2）搜索 etc 目录下所有以 sh 开头的文件</p>

<pre>locate /etc/sh</pre>

<p>（3）查找 /var 目录下，以 reason 结尾的文件</p>

<pre>locate -r '^/var.*reason$'（其中.表示一个字符，*表示任务多个；.*表示任意多个字符）</pre>

<h3>17、find 命令</h3>
<p>用于在文件树中查找文件，并作出相应的处理。</p>

<p>命令格式：</p>

<pre>find pathname -options [-print -exec -ok ...]</pre>

<p>命令参数：</p>

<pre>pathname: find命令所查找的目录路径。例如用.来表示当前目录，用/来表示系统根目录。
-print： find命令将匹配的文件输出到标准输出。
-exec： find命令对匹配的文件执行该参数所给出的shell命令。相应命令的形式为'command' {  } \;，注意{   }和\；之间的空格。
-ok： 和-exec的作用相同，只不过以一种更为安全的模式来执行该参数所给出的shell命令，在执行每一个命令之前，都会给出提示，让用户来确定是否执行。</pre>

<p><strong>命令选项：</strong></p>

<pre>-name 按照文件名查找文件
-perm 按文件权限查找文件
-user 按文件属主查找文件
-group  按照文件所属的组来查找文件。
-type  查找某一类型的文件，诸如：
   b - 块设备文件
   d - 目录
   c - 字符设备文件
   l - 符号链接文件
   p - 管道文件
   f - 普通文件

-size n :[c] 查找文件长度为n块文件，带有c时表文件字节大小
-amin n   查找系统中最后N分钟访问的文件
-atime n  查找系统中最后n*24小时访问的文件
-cmin n   查找系统中最后N分钟被改变文件状态的文件
-ctime n  查找系统中最后n*24小时被改变文件状态的文件
-mmin n   查找系统中最后N分钟被改变文件数据的文件
-mtime n  查找系统中最后n*24小时被改变文件数据的文件
(用减号-来限定更改时间在距今n日以内的文件，而用加号+来限定更改时间在距今n日以前的文件。 )
-maxdepth n 最大查找目录深度
-prune 选项来指出需要忽略的目录。在使用-prune选项时要当心，因为如果你同时使用了-depth选项，那么-prune选项就会被find命令忽略
-newer 如果希望查找更改时间比某个文件新但比另一个文件旧的所有文件，可以使用-newer选项
</pre>
<p><strong>实例：</strong></p>

<p>（1）查找 48 小时内修改过的文件</p>

<pre>find -atime -2</pre>

<p>（2）在当前目录查找 以 .log 结尾的文件。  <span class="marked">.</span>  代表当前目录</p>

<pre>find ./ -name '*.log'</pre>

<p>（3）查找 /opt 目录下 权限为 777 的文件</p>

<pre>find /opt -perm 777</pre>

<p>（4）查找大于 1K 的文件</p>

<pre>find -size +1000c</pre>
<p>查找等于 1000 字符的文件</p>
<pre>find -size 1000c </pre>

<p>-exec 参数后面跟的是 command 命令，它的终止是以 ; 为结束标志的，所以这句命令后面的分号是不可缺少的，考虑到各个系统中分号会有不同的意义，所以前面加反斜杠。{} 花括号代表前面find查找出来的文件名。</p>

<p><strong>实例：</strong></p>

<p>（5）在当前目录中查找更改时间在10日以前的文件并删除它们(无提醒）</p>

<pre>find . -type f -mtime +10 -exec rm -f {} \;</pre>

<p>（6）当前目录中查找所有文件名以.log结尾、更改时间在5日以上的文件，并删除它们，只不过在删除之前先给出提示。 按y键删除文件，按n键不删除</p>

<pre>find . -name '*.log' mtime +5 -ok -exec rm {} \;</pre>

<p>（7）当前目录下查找文件名以 passwd 开头，内容包含 "pkg" 字符的文件</p>

<pre>find . -f -name 'passwd*' -exec grep "pkg" {} \;</pre>

<p>（8）用 exec 选项执行 cp 命令 </p>

<pre>find . -name '*.log' -exec cp {} test3 \;</pre>

<p>-xargs find 命令把匹配到的文件传递给 xargs 命令，而 xargs 命令每次只获取一部分文件而不是全部，不像 -exec 选项那样。这样它可以先处理最先获取的一部分文件，然后是下一批，并如此继续下去。</p>

<p>实例：</p>

<p>（9）查找当前目录下每个普通文件，然后使用 xargs 来判断文件类型</p>

<pre>find . -type f -print | xargs file</pre>

<p>（10）查找当前目录下所有以 js 结尾的并且其中包含 'editor' 字符的普通文件</p>

<pre>find . -type f -name "*.js" -exec grep -lF 'ueditor' {} \;
find -type f -name '*.js' | xargs grep -lF 'editor'</pre>

<p>（11）利用 xargs 执行 mv 命令</p>

<pre>find . -name "*.log" | xargs -i mv {} test4</pre>

<p>（12）用 grep 命令在当前目录下的所有普通文件中搜索 hostnames 这个词，并标出所在行：</p>

<pre>find . -name \*(转义） -type f -print | xargs grep -n 'hostnames'</pre>

<p>（13）查找当前目录中以一个小写字母开头，最后是 4 到 9 加上 .log 结束的文件：</p>

<pre>find . -name '[a-z]*[4-9].log' -print</pre>

<p>（14）在 test 目录查找不在 test4 子目录查找</p>

<pre>find test -path 'test/test4' -prune -o -print</pre>

<p>（15）实例1：查找更改时间比文件 log2012.log新但比文件 log2017.log 旧的文件</p>

<pre>find -newer log2012.log ! -newer log2017.log</pre>

<p><strong>使用 depth 选项：</strong></p>

<p>depth 选项可以使 find 命令向磁带上备份文件系统时，希望首先备份所有的文件，其次再备份子目录中的文件。 </p>

<p>实例：find 命令从文件系统的根目录开始，查找一个名为 CON.FILE 的文件。 它将首先匹配所有的文件然后再进入子目录中查找</p>

<pre>find / -name "CON.FILE" -depth -print</pre>

<h3>18、chmod 命令</h3>
<p>用于改变 linux 系统文件或目录的访问权限。用它控制文件或目录的访问权限。该命令有两种用法。一种是包含字母和操作符表达式的文字设定法；另一种是包含数字的数字设定法。</p>

<p>每一文件或目录的访问权限都有三组，每组用三位表示，分别为文件属主的读、写和执行权限；与属主同组的用户的读、写和执行权限；系统中其他用户的读、写和执行权限。可使用 ls -l test.txt 查找。</p>

<p>以文件 log2012.log 为例：</p>

<pre>-rw-r--r-- 1 root root 296K 11-13 06:03 log2012.log</pre>

<p>第一列共有 10 个位置，第一个字符指定了文件类型。在通常意义上，一个目录也是一个文件。如果第一个字符是横线，表示是一个非目录的文件。如果是 d，表示是一个目录。从第二个字符开始到第十个 9 个字符，3 个字符一组，分别表示了 3 组用户对文件或者目录的权限。权限字符用横线代表空许可，r 代表只读，w 代表写，x 代表可执行。</p>

<p>常用参数：</p>

<pre>-c 当发生改变时，报告处理信息
-R 处理指定目录以及其子目录下所有文件</pre>

<p>权限范围：</p>

<pre>u ：目录或者文件的当前的用户
g ：目录或者文件的当前的群组
o ：除了目录或者文件的当前用户或群组之外的用户或者群组
a ：所有的用户及群组</pre>



<p>权限代号：</p>

<pre>r ：读权限，用数字4表示
w ：写权限，用数字2表示
x ：执行权限，用数字1表示
- ：删除权限，用数字0表示
s ：特殊权限</pre>

<p>实例：</p>

<p>（1）增加文件 t.log 所有用户可执行权限</p>

<pre>chmod a+x t.log</pre>

<p>（2）撤销原来所有的权限，然后使拥有者具有可读权限,并输出处理信息</p>

<pre>chmod u=r t.log -c</pre>

<p>（3）给 file 的属主分配读、写、执行(7)的权限，给file的所在组分配读、执行(5)的权限，给其他用户分配执行(1)的权限</p>

<pre>chmod 751 t.log -c（或者：chmod u=rwx,g=rx,o=x t.log -c)</pre>

<p>（4）将 test 目录及其子目录所有文件添加可读权限</p>

<pre>chmod u+r,g+r,o+r -R text/ -c</pre>

19、tar 命令
<p>用来压缩和解压文件。tar 本身不具有压缩功能，只具有打包功能，有关压缩及解压是调用其它的功能来完成。</p>

<p>弄清两个概念：打包和压缩。打包是指将一大堆文件或目录变成一个总的文件；压缩则是将一个大的文件通过一些压缩算法变成一个小文件</p>

<p><strong>常用参数：</strong></p>

<pre>-c 建立新的压缩文件
-f 指定压缩文件
-r 添加文件到已经压缩文件包中
-u 添加改了和现有的文件到压缩包中
-x 从压缩包中抽取文件
-t 显示压缩文件中的内容
-z 支持gzip压缩
-j 支持bzip2压缩
-Z 支持compress解压文件
-v 显示操作过程</pre>
<p>有关 gzip 及 bzip2 压缩:</p>

<pre>gzip 实例：压缩 gzip fileName .tar.gz 和.tgz  解压：gunzip filename.gz 或 gzip -d filename.gz
          对应：tar zcvf filename.tar.gz     tar zxvf filename.tar.gz

bz2实例：压缩 bzip2 -z filename .tar.bz2 解压：bunzip filename.bz2或bzip -d filename.bz2
       对应：tar jcvf filename.tar.gz         解压：tar jxvf filename.tar.bz2</pre>
<p><strong>
实例：</strong></p>

<p>（1）将文件全部打包成 tar 包</p>

<pre>tar -cvf log.tar 1.log,2.log 或tar -cvf log.*</pre>

<p>（2）将 /etc 下的所有文件及目录打包到指定目录，并使用 gz 压缩</p>

<pre>tar -zcvf /tmp/etc.tar.gz /etc</pre>

<p>（3）查看刚打包的文件内容（一定加z，因为是使用 gzip 压缩的）</p>

<pre>tar -ztvf /tmp/etc.tar.gz</pre>

<p>（4）要压缩打包 /home, /etc ，但不要 /home/dmtsai</p>

<pre>tar --exclude /home/dmtsai -zcvf myfile.tar.gz /home/* /etc</pre>

<h3>20、chown 命令</h3>
<p>chown 将指定文件的拥有者改为指定的用户或组，用户可以是用户名或者用户 ID；组可以是组名或者组 ID；文件是以空格分开的要改变权限的文件列表，支持通配符。</p>

<pre>-c 显示更改的部分的信息
-R 处理指定目录及子目录</pre>

<p><strong>实例：</strong></p>

<p>（1）改变拥有者和群组 并显示改变信息</p>

<pre>chown -c mail:mail log2012.log</pre>

<p>（2）改变文件群组</p>

<pre>chown -c :mail t.log</pre>

<p>（3）改变文件夹及子文件目录属主及属组为 mail</p>

<pre>chown -cR mail: test/</pre>



<h3>21、df 命令</h3>
<p>显示磁盘空间使用情况。获取硬盘被占用了多少空间，目前还剩下多少空间等信息，如果没有文件名被指定，则所有当前被挂载的文件系统的可用空间将被显示。默认情况下，磁盘空间将以 1KB 为单位进行显示，除非环境变量 POSIXLY_CORRECT 被指定，那样将以512字节为单位进行显示：</p>

<pre>-a 全部文件系统列表
-h 以方便阅读的方式显示信息
-i 显示inode信息
-k 区块为1024字节
-l 只显示本地磁盘
-T 列出文件系统类型</pre>



<p><strong>实例：</strong></p>

<p>（1）显示磁盘使用情况</p>

<pre>df -l</pre>

<p>（2）以易读方式列出所有文件系统及其类型</p>

<pre>df -haT</pre> 

<h3>22、du 命令</h3>
<p>du 命令也是查看使用空间的，但是与 df 命令不同的是 Linux du 命令是对文件和目录磁盘使用的空间的查看：</p>

<p>命令格式：</p>

<pre>du [选项] [文件]</pre>

<p><strong>常用参数：</strong></p>

<pre>-a 显示目录中所有文件大小
-k 以KB为单位显示文件大小
-m 以MB为单位显示文件大小
-g 以GB为单位显示文件大小
-h 以易读方式显示文件大小
-s 仅显示总计
-c或--total  除了显示个别目录或文件的大小外，同时也显示所有目录或文件的总和</pre>

<p><strong>实例：</strong></p>

<p>（1）以易读方式显示文件夹内及子文件夹大小</p>

<pre>du -h scf/</pre>

<p>（2）以易读方式显示文件夹内所有文件大小</p>

<pre>du -ah scf/</pre>

<p>（3）显示几个文件或目录各自占用磁盘空间的大小，还统计它们的总和</p>

<pre>du -hc test/ scf/</pre>

<p>（4）输出当前目录下各个子目录所使用的空间</p>

<pre>du -hc --max-depth=1 scf/</pre>

<h3>23、ln 命令</h3>
<p>功能是为文件在另外一个位置建立一个同步的链接，当在不同目录需要该问题时，就不需要为每一个目录创建同样的文件，通过 ln 创建的链接（link）减少磁盘占用量。</p>

<p>链接分类：软件链接及硬链接</p>

<p>软链接：</p>
<ul><li>

1.软链接，以路径的形式存在。类似于Windows操作系统中的快捷方式
</li><li>
2.软链接可以 跨文件系统 ，硬链接不可以
</li><li>
3.软链接可以对一个不存在的文件名进行链接
</li><li>
4.软链接可以对目录进行链接
</li></ul>
<p>硬链接:</p>
<ul><li>
1.硬链接，以文件副本的形式存在。但不占用实际空间。
</li><li>
2.不允许给目录创建硬链接
</li><li>
3.硬链接只有在同一个文件系统中才能创建
</li></ul>
<p><strong>需要注意：</strong></p>
<ul><li>
第一：ln命令会保持每一处链接文件的同步性，也就是说，不论你改动了哪一处，其它的文件都会发生相同的变化；
</li><li>
第二：ln的链接又分软链接和硬链接两种，软链接就是ln –s 源文件 目标文件，它只会在你选定的位置上生成一个文件的镜像，不会占用磁盘空间，硬链接 ln 源文件 目标文件，没有参数-s， 它会在你选定的位置上生成一个和源文件大小相同的文件，无论是软链接还是硬链接，文件都保持同步变化。
</li><li>
第三：ln指令用在链接文件或目录，如同时指定两个以上的文件或目录，且最后的目的地是一个已经存在的目录，则会把前面指定的所有文件或目录复制到该目录中。若同时指定多个文件或目录，且最后的目的地并非是一个已存在的目录，则会出现错误信息。
</li></ul>
<p><strong>常用参数：</strong></p>

<pre>-b 删除，覆盖以前建立的链接
-s 软链接（符号链接）
-v 显示详细处理过程</pre>

<p><strong>实例：</strong></p>

<p>（1）给文件创建软链接，并显示操作信息</p>

<pre>ln -sv source.log link.log</pre>

<p>（2）给文件创建硬链接，并显示操作信息</p>

<pre>ln -v source.log link1.log</pre>

<p>（3）给目录创建软链接</p>

<pre>ln -sv /opt/soft/test/test3 /opt/soft/test/test5</pre>

<h3>24、date 命令</h3>
<p>显示或设定系统的日期与时间。</p>

<p>命令参数：</p>

<pre>-d&lt;字符串&gt; 　显示字符串所指的日期与时间。字符串前后必须加上双引号。
-s&lt;字符串&gt; 　根据字符串来设置日期与时间。字符串前后必须加上双引号。
-u 　显示GMT。
%H 小时(00-23)
%I 小时(00-12)
%M 分钟(以00-59来表示)
%s 总秒数。起算时间为1970-01-01 00:00:00 UTC。
%S 秒(以本地的惯用法来表示)
%a 星期的缩写。
%A 星期的完整名称。
%d 日期(以01-31来表示)。
%D 日期(含年月日)。
%m 月份(以01-12来表示)。
%y 年份(以00-99来表示)。
%Y 年份(以四位数来表示)。</pre>

<p><strong>实例：</strong></p>

<p>（1）显示下一天</p>

<pre>date +%Y%m%d --date="+1 day"  //显示下一天的日期</pre>

<p>（2）-d参数使用</p>

<pre>date -d "nov 22"  今年的 11 月 22 日是星期三
date -d '2 weeks' 2周后的日期
date -d 'next monday' (下周一的日期)
date -d next-day +%Y%m%d（明天的日期）或者：date -d tomorrow +%Y%m%d
date -d last-day +%Y%m%d(昨天的日期) 或者：date -d yesterday +%Y%m%d
date -d last-month +%Y%m(上个月是几月)
date -d next-month +%Y%m(下个月是几月)</pre>

<h3>25、cal 命令</h3>
<p>可以用户显示公历（阳历）日历如只有一个参数，则表示年份(1-9999)，如有两个参数，则表示月份和年份：</p>

<p>常用参数：</p>

<pre>-3 显示前一月，当前月，后一月三个月的日历
-m 显示星期一为第一列
-j 显示在当前年第几天
-y [year]显示当前年[year]份的日历</pre>

<p><strong>实例：</strong></p>

<p>（1）显示指定年月日期</p>

<pre>cal 9 2012</pre>

<p>（2）显示2013年每个月日历</p>

<pre>cal -y 2013</pre>

<p>（3）将星期一做为第一列,显示前中后三月</p>

<pre>cal -3m</pre>

<h3>26、grep 命令</h3>
<p>强大的文本搜索命令，grep(Global Regular Expression Print) 全局正则表达式搜索。</p>

<p>grep 的工作方式是这样的，它在一个或多个文件中搜索字符串模板。如果模板包括空格，则必须被引用，模板后的所有字符串被看作文件名。搜索的结果被送到标准输出，不影响原文件内容。</p>

<p>命令格式：</p>

<pre>grep [option] pattern file|dir</pre>

<p>常用参数：</p>

<pre>-A n --after-context显示匹配字符后n行
-B n --before-context显示匹配字符前n行
-C n --context 显示匹配字符前后n行
-c --count 计算符合样式的列数
-i 忽略大小写
-l 只列出文件内容符合指定的样式的文件名称
-f 从文件中读取关键词
-n 显示匹配内容的所在文件中行数
-R 递归查找文件夹</pre>

<p>grep 的规则表达式:</p>

<pre>^  #锚定行的开始 如：'^grep'匹配所有以grep开头的行。 
$  #锚定行的结束 如：'grep$'匹配所有以grep结尾的行。 
.  #匹配一个非换行符的字符 如：'gr.p'匹配gr后接一个任意字符，然后是p。  
*  #匹配零个或多个先前字符 如：'*grep'匹配所有一个或多个空格后紧跟grep的行。
.*   #一起用代表任意字符。  
[]   #匹配一个指定范围内的字符，如'[Gg]rep'匹配Grep和grep。 
[^]  #匹配一个不在指定范围内的字符，如：'[^A-FH-Z]rep'匹配不包含A-R和T-Z的一个字母开头，紧跟rep的行。  
\(..\)  #标记匹配字符，如'\(love\)'，love被标记为1。   
\&lt;      #锚定单词的开始，如:'\&lt;grep'匹配包含以grep开头的单词的行。
\&gt;      #锚定单词的结束，如'grep\&gt;'匹配包含以grep结尾的单词的行。
x\{m\}  #重复字符x，m次，如：'0\{5\}'匹配包含5个o的行。 
x\{m,\}  #重复字符x,至少m次，如：'o\{5,\}'匹配至少有5个o的行。  
x\{m,n\}  #重复字符x，至少m次，不多于n次，如：'o\{5,10\}'匹配5--10个o的行。  
\w    #匹配文字和数字字符，也就是[A-Za-z0-9]，如：'G\w*p'匹配以G后跟零个或多个文字或数字字符，然后是p。  
\W    #\w的反置形式，匹配一个或多个非单词字符，如点号句号等。  
\b    #单词锁定符，如: '\bgrep\b'只匹配grep。</pre>

<p><strong>实例：</strong></p>

<p>（1）查找指定进程</p>

<pre>ps -ef | grep svn</pre>

<p>（2）查找指定进程个数</p>

<pre>ps -ef | grep svn -c</pre>

<p>（3）从文件中读取关键词</p>

<pre>cat test1.txt | grep -f key.log</pre>

<p>（4）从文件夹中递归查找以grep开头的行，并只列出文件</p>

<pre>grep -lR '^grep' /tmp</pre>

<p>（5）查找非x开关的行内容</p>

<pre>grep '^[^x]' test.txt</pre>

<p>（6）显示包含 ed 或者 at 字符的内容行</p>

<pre>grep -E 'ed|at' test.txt</pre>

<h3>27、wc 命令</h3>
<p>wc(word count)功能为统计指定的文件中字节数、字数、行数，并将统计结果输出</p>

<p>命令格式：</p>

<pre>wc [option] file..</pre>

<p><strong>命令参数：</strong></p>

<pre>-c 统计字节数
-l 统计行数
-m 统计字符数
-w 统计词数，一个字被定义为由空白、跳格或换行字符分隔的字符串</pre>

<p><strong>实例：</strong></p>

<p>（1）查找文件的  行数 单词数 字节数 文件名</p>

<pre>wc text.txt</pre>
<p> 结果：</p><pre>7     8     70     test.txt</pre>

<p>（2）统计输出结果的行数</p>

<pre>cat test.txt | wc -l</pre>

<h3>28、ps 命令</h3>
<p>ps(process status)，用来查看当前运行的进程状态，一次性查看，如果需要动态连续结果使用 top</p>

<p>linux上进程有5种状态:</p>
<ul><li>
1. 运行(正在运行或在运行队列中等待)
</li><li>
2. 中断(休眠中, 受阻, 在等待某个条件的形成或接受到信号)
</li><li>
3. 不可中断(收到信号不唤醒和不可运行, 进程必须等待直到有中断发生)
</li><li>
4. 僵死(进程已终止, 但进程描述符存在, 直到父进程调用wait4()系统调用后释放)
</li><li>
5. 停止(进程收到SIGSTOP, SIGSTP, SIGTIN, SIGTOU信号后停止运行运行)
</li></ul>
<p>ps 工具标识进程的5种状态码:</p>

<pre>D 不可中断 uninterruptible sleep (usually IO)
R 运行 runnable (on run queue)
S 中断 sleeping
T 停止 traced or stopped
Z 僵死 a defunct (&rdquo;zombie&rdquo;) process</pre>

<p><strong>命令参数：</strong></p>

<pre>-A 显示所有进程
a 显示所有进程
-a 显示同一终端下所有进程
c 显示进程真实名称
e 显示环境变量
f 显示进程间的关系
r 显示当前终端运行的进程
-aux 显示所有包含其它使用的进程</pre>

<p><strong>实例：</strong></p>

<p>（1）显示当前所有进程环境变量及进程间关系</p>

<pre>ps -ef</pre>

<p>（2）显示当前所有进程</p>

<pre>ps -A</pre>

<p>（3）与grep联用查找某进程</p>

<pre>ps -aux | grep apache</pre>

<p>（4）找出与 cron 与 syslog 这两个服务有关的 PID 号码</p>

<pre>ps aux | grep '(cron|syslog)'</pre>

<p>29、top 命令</p>
<p>显示当前系统正在执行的进程的相关信息，包括进程 ID、内存占用率、CPU 占用率等</p>

<p><strong>常用参数：</strong></p>

<pre>-c 显示完整的进程命令
-s 保密模式
-p &lt;进程号&gt; 指定进程显示
-n &lt;次数&gt;循环显示次数</pre>

<p>实例：</p>

<p><strong>（1）</strong></p>

<pre>top - 14:06:23 up 70 days, 16:44,  2 users,  load average: 1.25, 1.32, 1.35
Tasks: 206 total,   1 running, 205 sleeping,   0 stopped,   0 zombie
Cpu(s):  5.9%us,  3.4%sy,  0.0%ni, 90.4%id,  0.0%wa,  0.0%hi,  0.2%si,  0.0%st
Mem:  32949016k total, 14411180k used, 18537836k free,   169884k buffers
Swap: 32764556k total,        0k used, 32764556k free,  3612636k cached
PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND  
28894 root      22   0 1501m 405m  10m S 52.2  1.3   2534:16 java  </pre>

<p>前五行是当前系统情况整体的统计信息区。</p>

<p><strong>第一行，任务队列信息，同 uptime 命令的执行结果，具体参数说明情况如下：</strong></p>

<p>14:06:23 — 当前系统时间</p>

<p>up 70 days, 16:44 — 系统已经运行了70天16小时44分钟（在这期间系统没有重启过的吆！）</p>

<p>2 users — 当前有2个用户登录系统</p>

<p>load average: 1.15, 1.42, 1.44 — load average后面的三个数分别是1分钟、5分钟、15分钟的负载情况。</p>

<p>load average数据是每隔5秒钟检查一次活跃的进程数，然后按特定算法计算出的数值。如果这个数除以逻辑CPU的数量，结果高于5的时候就表明系统在超负荷运转了。</p>

<p><strong>第二行，Tasks — 任务（进程），具体信息说明如下：</strong></p>

<p>系统现在共有206个进程，其中处于运行中的有1个，205个在休眠（sleep），stoped状态的有0个，zombie状态（僵尸）的有0个。</p>

<p><strong>第三行，cpu状态信息，具体属性说明如下：</strong></p>

<pre>5.9%us &mdash; 用户空间占用CPU的百分比。
3.4% sy &mdash; 内核空间占用CPU的百分比。
0.0% ni &mdash; 改变过优先级的进程占用CPU的百分比
90.4% id &mdash; 空闲CPU百分比
0.0% wa &mdash; IO等待占用CPU的百分比
0.0% hi &mdash; 硬中断（Hardware IRQ）占用CPU的百分比
0.2% si &mdash; 软中断（Software Interrupts）占用CPU的百分比</pre>

<p><strong>备注：</strong>在这里CPU的使用比率和windows概念不同，需要理解linux系统用户空间和内核空间的相关知识！</p>

<p>第四行，内存状态，具体信息如下：</p>

<pre>32949016k total &mdash; 物理内存总量（32GB）
14411180k used &mdash; 使用中的内存总量（14GB）
18537836k free &mdash; 空闲内存总量（18GB）
169884k buffers &mdash; 缓存的内存量 （169M）</pre>

<p><strong>第五行，swap交换分区信息，具体信息说明如下：</strong></p>

<pre>32764556k total &mdash; 交换区总量（32GB）
0k used &mdash; 使用的交换区总量（0K）
32764556k free &mdash; 空闲交换区总量（32GB）
3612636k cached &mdash; 缓冲的交换区总量（3.6GB）</pre>

<p><strong>第六行，空行。</strong></p>

<p><strong>第七行以下：各进程（任务）的状态监控，项目列信息说明如下：</strong></p>

<pre>PID &mdash; 进程id
USER &mdash; 进程所有者
PR &mdash; 进程优先级
NI &mdash; nice值。负值表示高优先级，正值表示低优先级
VIRT &mdash; 进程使用的虚拟内存总量，单位kb。VIRT=SWAP+RES
RES &mdash; 进程使用的、未被换出的物理内存大小，单位kb。RES=CODE+DATA
SHR &mdash; 共享内存大小，单位kb
S &mdash; 进程状态。D=不可中断的睡眠状态 R=运行 S=睡眠 T=跟踪/停止 Z=僵尸进程
%CPU &mdash; 上次更新到现在的CPU时间占用百分比
%MEM &mdash; 进程使用的物理内存百分比
TIME+ &mdash; 进程使用的CPU时间总计，单位1/100秒
COMMAND &mdash; 进程名称（命令名/命令行）
</pre>


<p><strong>top 交互命令</strong></p>

<pre>h 显示top交互命令帮助信息
c 切换显示命令名称和完整命令行
m 以内存使用率排序
P 根据CPU使用百分比大小进行排序
T 根据时间/累计时间进行排序
W 将当前设置写入~/.toprc文件中
o或者O 改变显示项目的顺序</pre>

<h3>30、kill 命令</h3>
<p>发送指定的信号到相应进程。不指定型号将发送SIGTERM（15）终止指定进程。如果任无法终止该程序可用"-KILL" 参数，其发送的信号为SIGKILL(9) ，将强制结束进程，使用ps命令或者jobs 命令可以查看进程号。root用户将影响用户的进程，非root用户只能影响自己的进程。</p>

<p><strong>常用参数：</strong></p>

<pre>-l  信号，若果不加信号的编号参数，则使用&ldquo;-l&rdquo;参数会列出全部的信号名称
-a  当处理当前进程时，不限制命令名和进程号的对应关系
-p  指定kill 命令只打印相关进程的进程号，而不发送任何信号
-s  指定发送信号
-u  指定用户</pre>

<p><strong>实例：</strong></p>

<p>（1）先使用ps查找进程pro1，然后用kill杀掉</p>

<pre>kill -9 $(ps -ef | grep pro1)</pre>

<h3>31、free 命令</h3>
<p>显示系统内存使用情况，包括物理内存、交互区内存(swap)和内核缓冲区内存。</p>

<p><strong>命令参数：</strong></p>

<pre>-b 以Byte显示内存使用情况
-k 以kb为单位显示内存使用情况
-m 以mb为单位显示内存使用情况
-g 以gb为单位显示内存使用情况
-s&lt;间隔秒数&gt; 持续显示内存
-t 显示内存使用总合</pre>

<p><strong>实例：</strong></p>

<p>（1）显示内存使用情况</p>

<pre>free
free -k
free -m</pre>

<p>（2）以总和的形式显示内存的使用信息</p>

<pre>free -t</pre>

<p>（3）周期性查询内存使用情况</p>

<pre>free -s 10</pre>


<blockquote><p>原文地址：https://www.cnblogs.com/gaojun/p/3359355.html</p></blockquote>

				</div>
			</div>
			<div class="previous-next-links">
			<div class="previous-design-link">← <a href="../w3cnote/cpp-static-const.html" rel="prev"> C++ static、const 和 static const 类型成员变量声明以及初始化</a> </div>
			<div class="next-design-link"><a href="../w3cnote/html5-canvas-intro.html" rel="next"> 学习 HTML5 Canvas 这一篇文章就够了</a> →</div>
			</div>
			<style>
.wrapper {
  /*text-transform: uppercase; */
  background: #ececec;
  color: #555;
  cursor: help;
  font-family: "Gill Sans", Impact, sans-serif;
  font-size: 20px;
  position: relative;
  text-align: center;
  width: 200px;
  -webkit-transform: translateZ(0); /* webkit flicker fix */
  -webkit-font-smoothing: antialiased; /* webkit text rendering fix */
}

.wrapper .tooltip {
  white-space: nowrap;
  font-size: 14px;
  text-align: left;
  background: #96b97d;
  bottom: 100%;
  color: #fff;
  display: block;
  left: -25px;
  margin-bottom: 15px;
  opacity: 0;
  padding: 14px;
  pointer-events: none;
  position: absolute;
  
  -webkit-transform: translateY(10px);
     -moz-transform: translateY(10px);
      -ms-transform: translateY(10px);
       -o-transform: translateY(10px);
          transform: translateY(10px);
  -webkit-transition: all .25s ease-out;
     -moz-transition: all .25s ease-out;
      -ms-transition: all .25s ease-out;
       -o-transition: all .25s ease-out;
          transition: all .25s ease-out;
  -webkit-box-shadow: 2px 2px 6px rgba(0, 0, 0, 0.28);
     -moz-box-shadow: 2px 2px 6px rgba(0, 0, 0, 0.28);
      -ms-box-shadow: 2px 2px 6px rgba(0, 0, 0, 0.28);
       -o-box-shadow: 2px 2px 6px rgba(0, 0, 0, 0.28);
          box-shadow: 2px 2px 6px rgba(0, 0, 0, 0.28);
}
.tooltip a {
	color:#fff;
}
/* This bridges the gap so you can mouse into the tooltip without it disappearing */
.wrapper .tooltip:before {
  bottom: -20px;
  content: " ";
  display: block;
  height: 20px;
  left: 0;
  position: absolute;
  width: 100%;
}  

/* CSS Triangles - see Trevor's post */
.wrapper .tooltip:after {
  border-left: solid transparent 10px;
  border-right: solid transparent 10px;
  border-top: solid #96b97d 10px;
  bottom: -10px;
  content: " ";
  height: 0;
  left: 20%;
  margin-left: -13px;
  position: absolute;
  width: 0;
}
.wrapper .tooltip1 {
	margin-left: 50px;
	padding-top: 0px;
}
/*
.wrapper:hover .tooltip {
  opacity: 1;
  pointer-events: auto;
  -webkit-transform: translateY(0px);
     -moz-transform: translateY(0px);
      -ms-transform: translateY(0px);
       -o-transform: translateY(0px);
          transform: translateY(0px);
}
*/
/* IE can just show/hide with no transition */
.lte8 .wrapper .tooltip {
  display: none;
}

.lte8 .wrapper:hover .tooltip {
  display: block;
}

</style>

<link rel="stylesheet" href="../0/upvotejs.css">
<script src=""></script>
<script src=""></script>
<div id="respond" class="no_webshot"> 
		<div class="comment-signarea" style=" padding: 20px 20px;"> 
	<h3 class="text-muted" id="share_code" style="color: #799961;"><i class="fa fa-pencil-square-o" aria-hidden="true"></i> 点我分享笔记</h3>
	<!--
	<p style="font-size:14px;">笔记需要是本篇文章的内容扩展！</p><br>
	<p style="font-size:12px;"><a href="../tougao" target="_blank">文章投稿，可点击这里</a></p>
	<p style="font-size:14px;"><a href="../w3cnote/runoob-user-test-intro.html#invite" target="_blank">注册邀请码获取方式</a></p>
		<h3 class="text-muted"><i class="fa fa-info-circle" aria-hidden="true"></i> 分享笔记前必须<a href="javascript:;" class="runoob-pop">登录</a>！</h3>
		<p><a href="../w3cnote/runoob-user-test-intro.html#invite" target="_blank">注册邀请码获取方式</a></p>-->
	</div>
		
	<form action="/wp-content/themes/runoob/option/addnote.php" method="post" id="commentform" style="display:none;">
		<div class="comt">
			<div class="comt-title">
				<i style="font-size:36px;" class="fa fa-user-circle" aria-hidden="true"></i>				<p><a id="cancel-comment-reply-link" href="javascript:;">取消</a></p>
			</div>
			<div class="comt-box">
			<div id="mded"></div>
			
				<div class="comt-ctrl">
					<div class="comt-tips"><input type='hidden' name='comment_post_ID' value='21124' id='comment_post_ID' />
<input type='hidden' name='comment_parent' id='comment_parent' value='0' />
</div>
					<button type="submit" name="submit" id="submit" tabindex="5"><i class="fa fa-pencil" aria-hidden="true"></i> 分享笔记</button>
				</div>
			</div>
		
				
					<div class="comt-comterinfo"> 
						<ul id="comment-author-info">
							<li class="form-inline"><label class="hide" for="author">昵称</label><input class="ipt" type="text" name="author" id="author" value="" tabindex="2" placeholder="昵称"><span class="text-muted">昵称 (必填)</span></li>
							<li class="form-inline"><label class="hide" for="email">邮箱</label><input class="ipt" type="text" name="email" id="email" value="" tabindex="3" placeholder="邮箱"><span class="text-muted">邮箱 (必填)</span></li>
							<li class="form-inline"><label class="hide" for="url">引用地址</label><input class="ipt" type="text" name="url" id="url" value="" tabindex="4" placeholder="引用地址"><span class="text-muted">引用地址</span></li>
						</ul>
					</div>
				
			
		</div>

	</form>
	</div>
<script type="text/javascript">
$(function() {
	//初始化编辑器
	
	var editor = new Simditor({
	  textarea: $('#mded'),
	  placeholder: '写笔记...',
	  upload:false,
	 // upload: {url:'/api/comment_upload_file.php',params: null,fileKey: 'upload_file',connectionCount: 1,leaveConfirm: '文件正在上传，您确定离开?'},
	  defaultImage: 'https://www.runoob.com/images/logo.png',
	  codeLanguages: '',
	  autosave: 'editor-content',
	  toolbar: [  'bold','code','ul','ol','image' ]
	});
	editor.on('selectionchanged', function() {
		$(".code-popover").hide();
	});

	// 提交数据
	$("#share_code").click(function() {
		$(".comment-signarea").hide();
		$("#commentform").show();
		
	});
	$("#user_add_note").click(function() {
		$(".comment-signarea").hide();
		$("#commentform").show();
		$('html, body').animate({
       	    scrollTop: $("#respond").offset().top
    	}, 200);
	});

	// 提交笔记
	var commentform=$('#commentform');
	commentform.prepend('<div id="comment-status" style="display:none;" ></div>');
	var statusdiv=$('#comment-status');
	
	commentform.submit(function(e){
		e.preventDefault();
		var noteContent = editor.getValue();
		// console.log(noteContent);
		noteContent = noteContent.replace(/<pre><code>/g,"<pre>");
		noteContent = noteContent.replace(/<\/code><\/pre>/g,"</pre>");
		
		// 系列化表单数据
		var comment_parent = 0;
		var is_user_logged_in = $("#is_user_logged_in").val();
		var comment_post_ID =  21124;
		var _wp_unfiltered_html_comment = $("#_wp_unfiltered_html_comment").val();
		var comment = noteContent;
		var author = $("#author").val();
		var url = $("#url").val();
		var email = $("#email").val();
		if(isBlank(author) && is_user_logged_in==0) {
			statusdiv.html('<p  class="ajax-error">请输入昵称！</p>').show();
		} else if(isBlank(email)  && is_user_logged_in==0) {
			statusdiv.html('<p  class="ajax-error">请输入邮箱！</p>').show();
		} else {
			// var formdata=commentform.serialize() + "&comment=" + noteContent ;
			// 添加状态信息
			statusdiv.html('<p>Processing...</p>').show();
			// 获取表单提交地址
			var formurl=commentform.attr('action');
			
			// 异步提交
			$.ajax({
					type: 'post',
					url: formurl,
					dataType:'json',
					data: {"comment_parent":comment_parent,"comment_post_ID":comment_post_ID, "_wp_unfiltered_html_comment":_wp_unfiltered_html_comment,"comment":comment,"url":url, "email":email,"author":author},
					error: function(XMLHttpRequest, textStatus, errorThrown){
					statusdiv.html('<p class="ajax-error" >数据不完整或表单提交太快了！</p>').show();
				},
				success: function(data, textStatus){
					if(data.errorno=="0") {
						$("#submit").prop('disabled', true);
						statusdiv.html('<p class="ajax-success" >笔记已提交审核，感谢分享笔记！</p>').show();
						alert('笔记已提交审核，感谢分享笔记！');
					}else{
						statusdiv.html('<p class="ajax-error" >'+data.msg+'</p>').show();
					}
					commentform.find('textarea[name=comment]').val('');
				}
			});
			setTimeout(function(){
		        $("#submit").prop('disabled', false);
		    }, 10*1000);
		}
		return false;

	});
	$(".comt-author").click(function() {
		href = $(this).children("a").attr("href");
		if(href.indexOf("/note/")!=-1) {
			var win = window.open(href, '_blank');
  			win.focus();
		}
	});
	$(".comt-meta span").hover(function(){
		$(this).children(".tooltip").css({ "opacity": 1, "pointer-events": "auto"});
	},function(){
		$(this).children(".tooltip").removeAttr("style");
	});
	/*
	$(".wrapper i").hover(function(){
		$(this).siblings(".tooltip").css({ "opacity": 1, "pointer-events": "auto"});
	},function(){
		$(this).siblings(".tooltip").css({ "opacity": 0, "pointer-events": "auto"});
	});
	*/
	//Upvote.create('runoobvote-id', {callback: vote_callback});
	var ajaxurl = 'https://www.runoob.com/wp-admin/admin-ajax.php';
	var callback = function(data) {
		//console.log($('#runoobvote-id').upvote('upvoted'));
		//console.log($('#runoobvote-id').upvote('downvoted'));
		//console.log(data);
		_vote_action = data.action;
		id_arr = data.id.split('-');
		um_id= id_arr[2];
		//console.log(um_id);
		
		var re = /^[1-9]+/;
		if (re.test(um_id)) { 
			var ajax_data = {
				_vote_action: _vote_action,
				action: "pinglun_zan",
				um_id: um_id,
				um_action: "ding"
			};
			//console.log(ajax_data);
			$.post(ajaxurl,ajax_data,function(status){
				//if(status.vote_num>999) {
				//	_voteHtml = '<span style="display: block; text-align: center;font-size: 20px; color: #6a737c; margin: 8px 0;">'+kFormatter(status.vote_num) +'</span>';
				//	$("#runoobvote-id-" + um_id + " .count").hide().after(_voteHtml);
				//}
				
			});
		}
	};
	if($('#comments').length && $('.upvotejs').length){
		$('.upvotejs').upvote({id: 21124, callback: callback});
	
		$.post(ajaxurl,{"action":"pinglun_zan","postid":21124},function(data){  
			$(data).each(function(key,value) {
				$("#runoobvote-id-" + value.commid + " .upvote").addClass(value.upvotejs_class);
				$("#runoobvote-id-" + value.commid + " .downvote").addClass(value.downvote_class);
				$("#runoobvote-id-" + value.commid + " .count").text(value.upvote_count);
			})
		},'json');
		
	}
	
	
});
function isBlank(str) {
    return (!str || /^\s*$/.test(str));
}
function kFormatter(num) {
	// return num;
    return Math.abs(num) > 999 ? Math.sign(num)*((Math.abs(num)/1000).toFixed(1)) + 'k' : Math.sign(num)*Math.abs(num)
}

</script>

<link rel="stylesheet" href="../0/qa.css?1.44">
<link rel="stylesheet" type="text/css" href="../0/simditor.min.css" />
<script type="text/javascript" src=""></script>
<script type="text/javascript" src=""></script>
<script type="text/javascript" src=""></script>
<script type="text/javascript" src=""></script>
<script type="text/javascript" src=""></script>
			<div class="article-heading-ad" id="w3cnote-ad728">
			<script async src=""></script>
			<!-- 移动版 自动调整 -->
			<ins class="adsbygoogle"
			     style="display:inline-block;min-width:300px;max-width:970px;width:100%;height:90px"
			     data-ad-client="ca-pub-5751451760833794"
			     data-ad-slot="1691338467"
			     data-ad-format="horizontal"></ins>
			<script>
			(adsbygoogle = window.adsbygoogle || []).push({});
			</script>
			</div>
			<style>
@media screen and (max-width: 768px) {
	#w3cnote-ad728 {
		display: none;
	}
}
p.note-author {
    border-bottom: 1px solid #ddd;
    font-size: 18px;
    font-weight: bold;
    color: #78a15a;
    padding-bottom: 2px;
    margin-bottom: 4px;
}
</style>
<script>
var aid = 21124;
</script>
	</div>
		
	</div>
	<div class="listcol last right-column">




<!--
	<div class="tab tab-light-blue"> 订阅</div>
	<div class="sidebar-box">
		<div class="socialicons">
			<a href="../feed" class="rss">RSS 订阅</a>
		
			<form action="//list.qq.com/cgi-bin/qf_compose_send" method="post">
			<input type="hidden" value="qf_booked_feedback" name="t">
			<input type="hidden" value="4b67b6b6c1f5e792559940cab4aebb8f1126fba880bff1a8" name="id">
			<input class="placeholder" id="feed_email" name="to" value="输入邮箱 订阅笔记" autocomplete="off">
			<input type="submit" value="订阅" class="btn btn-primary">
			</form>
		
		</div>
 
	</div>
-->	



<!--
	<div class="sidebar-box cate-list">
	<div class="sidebar-box recommend-here list-link">
			<a href="javascript:void(0);" style="font-size: 16px; color:#64854c;font-weight:bold;">笔记列表</a>
		</div>

 

</div>
-->

	 <div class="sidebar-box cate-list">
		 		

	 	<div class="sidebar-box recommend-here list-link">
			<a href="javascript:void(0);" style="font-size: 16px; color:#64854c;font-weight:bold;">教程列表</a>
		</div>
		
		<div class="cate-items"> 
				<a href="../ado">ADO 教程</a>
	<a href="../ajax">Ajax 教程</a>
	<a href="../android">Android 教程</a>
	<a href="../angularjs2">Angular2 教程</a>
	<a href="../angularjs">AngularJS 教程</a>
	<a href="../appml">AppML 教程</a>
	<a href="../asp">ASP 教程</a>
	<a href="../aspnet">ASP.NET 教程</a>
	<a href="../bootstrap">Bootstrap 教程</a>
	<a href="../bootstrap4">Bootstrap4 教程</a>
	<a href="../bootstrap5">Bootstrap5 教程</a>
	<a href="../cprogramming">C 教程</a>
	<a href="../csharp">C# 教程</a>
	<a href="../cplusplus">C++ 教程</a>
	<a href="../chartjs">Chart.js 教程</a>
	<a href="../cssref">CSS 参考手册</a>
	<a href="../css">CSS 教程</a>
	<a href="../css3">CSS3 教程</a>
	<a href="../django">Django 教程</a>
	<a href="../docker">Docker 教程</a>
	<a href="../dtd">DTD 教程</a>
	<a href="../echarts">ECharts 教程</a>
	<a href="../eclipse">Eclipse 教程</a>
	<a href="../firebug">Firebug 教程</a>
	<a href="../font-awesome">Font Awesome 图标</a>
	<a href="../foundation">Foundation 教程</a>
	<a href="../git">Git 教程</a>
	<a href="../go">Go 语言教程</a>
	<a href="../googleapi">Google 地图 API 教程</a>
	<a href="../highcharts">Highcharts 教程</a>
	<a href="../htmldom">HTML DOM 教程</a>
	<a href="../tags">HTML 参考手册</a>
	<a href="../charsets">HTML 字符集</a>
	<a href="../html">HTML 教程</a>
	<a href="../http">HTTP 教程</a>
	<a href="../ionic">ionic 教程</a>
	<a href="../ios">iOS 教程</a>
	<a href="../java">Java 教程</a>
	<a href="../jsref">JavaScript 参考手册</a>
	<a href="../js">Javascript 教程</a>
	<a href="../jeasyui">jQuery EasyUI 教程</a>
	<a href="../jquerymobile">jQuery Mobile 教程</a>
	<a href="../jqueryui">jQuery UI 教程</a>
	<a href="../jquery">jQuery 教程</a>
	<a href="../json">JSON 教程</a>
	<a href="../jsp">JSP 教程</a>
	<a href="../julia">Julia 教程</a>
	<a href="../kotlin">Kotlin 教程</a>
	<a href="../linux">Linux 教程</a>
	<a href="../lua">Lua 教程</a>
	<a href="../markdown">Markdown 教程</a>
	<a href="../matplotlib">Matplotlib 教程</a>
	<a href="../maven">Maven 教程</a>
	<a href="../memcached">Memcached 教程</a>
	<a href="../mongodb">MongoDB 教程</a>
	<a href="../mysql">MySQL 教程</a>
	<a href="../nodejs">Node.js 教程</a>
	<a href="../numpy">NumPy 教程</a>
	<a href="../pandas">Pandas 教程</a>
	<a href="../perl">Perl 教程</a>
	<a href="../php">PHP 教程</a>
	<a href="../postgresql">PostgreSQL 教程</a>
	<a href="../python3">Python 3 教程</a>
	<a href="../python">Python 基础教程</a>
	<a href="../r">R 教程</a>
	<a href="../rdf">RDF 教程</a>
	<a href="../react">React 教程</a>
	<a href="../redis">Redis 教程</a>
	<a href="../rss">RSS 教程</a>
	<a href="../ruby">Ruby 教程</a>
	<a href="../rust">Rust 教程</a>
	<a href="../sass">Sass 教程</a>
	<a href="../scala">Scala 教程</a>
	<a href="../scipy">SciPy 教程</a>
	<a href="../servlet">Servlet 教程</a>
	<a href="../soap">SOAP 教程</a>
	<a href="../sql">SQL 教程</a>
	<a href="../sqlite">SQLite 教程</a>
	<a href="../svg">SVG 教程</a>
	<a href="../svn">SVN 教程</a>
	<a href="../swift">Swift 教程</a>
	<a href="../tcpip">TCP/IP 教程</a>
	<a href="../typescript">TypeScript 教程</a>
	<a href="../vbscript">VBScript 教程</a>
	<a href="../vue2">Vue.js 教程</a>
	<a href="../vue3">Vue3 教程</a>
	<a href="../w3c">W3C 教程</a>
	<a href="../webservices">Web Service 教程</a>
	<a href="../wsdl">WSDL 教程</a>
	<a href="../xlink">XLink 教程</a>
	<a href="../dom">XML DOM 教程</a>
	<a href="../schema">XML Schema 教程</a>
	<a href="../xml">XML 教程</a>
	<a href="../xpath">XPath 教程</a>
	<a href="../xquery">XQuery 教程</a>
	<a href="../xslfo">XSLFO 教程</a>
	<a href="../xsl">XSLT 教程</a>
	<a href="../data-structures">数据结构</a>
	<a href="../regexp">正则表达式</a>
	<a href="../quiz">测验</a>
	<a href="../browsers">浏览器</a>
	<a href="../quality">网站品质</a>
	<a href="../web">网站建设指南</a>
	<a href="../hosting">网站服务器教程</a>
	<a href="../design-pattern">设计模式</a>
			
		</div> 
		 	 </div>
</div>
	</div>
</div>


<!-- 底部 -->
<div id="footer" class="mar-t50">
   <div class="runoob-block">
    <div class="runoob cf">
     <dl>
      <dt>
       在线实例
      </dt>
      <dd>
       &middot;<a target="_blank" href="../html/html-examples.html">HTML 实例</a>
      </dd>
      <dd>
       &middot;<a target="_blank" href="../css/css-examples.html">CSS 实例</a>
      </dd>
      <dd>
       &middot;<a target="_blank" href="../js/js-examples.html">JavaScript 实例</a>
      </dd>
      <dd>
       &middot;<a target="_blank" href="../ajx/ajax-examples.html">Ajax 实例</a>
      </dd>
       <dd>
       &middot;<a target="_blank" href="../jquery/jquery-examples.html">jQuery 实例</a>
      </dd>
      <dd>
       &middot;<a target="_blank" href="../xml/xml-examples.html">XML 实例</a>
      </dd>
      <dd>
       &middot;<a target="_blank" href="../java/java-examples.html">Java 实例</a>
      </dd>
     
     </dl>
     <dl>
      <dt>
      字符集&工具
      </dt>
      <dd>
       &middot; <a target="_blank" href="../charsets/html-charsets.html">HTML 字符集设置</a>
      </dd>
      <dd>
       &middot; <a target="_blank" href="../tags/html-ascii.html">HTML ASCII 字符集</a>
      </dd>
     <dd>
       &middot; <a target="_blank" href="https://c.runoob.com/front-end/6939/">JS 混淆/加密</a>
      </dd> 
      <dd>
       &middot; <a target="_blank" href="https://c.runoob.com/front-end/6232/">PNG/JPEG 图片压缩</a>
      </dd>
      <dd>
       &middot; <a target="_blank" href="../tags/html-colorpicker.html">HTML 拾色器</a>
      </dd>
      <dd>
       &middot; <a target="_blank" href="..//c.runoob.com/front-end/53">JSON 格式化工具</a>
      </dd>
      <dd>
       &middot; <a target="_blank" href="..//c.runoob.com/front-end/6680/">随机数生成器</a>
      </dd>
     </dl>
     <dl>
      <dt>
       最新更新
      </dt>
                   <dd>
       &middot;
      <a href="../matplotlib/matplotlib-imread.html" title="Matplotlib imread() 方法">Matplotlib imre...</a>
      </dd>
              <dd>
       &middot;
      <a href="../matplotlib/matplotlib-imsave.html" title="Matplotlib imsave() 方法">Matplotlib imsa...</a>
      </dd>
              <dd>
       &middot;
      <a href="../matplotlib/matplotlib-imshow.html" title="Matplotlib imshow() 方法">Matplotlib imsh...</a>
      </dd>
              <dd>
       &middot;
      <a href="../matplotlib/matplotlib-hist.html" title="Matplotlib 直方图">Matplotlib 直方图</a>
      </dd>
              <dd>
       &middot;
      <a href="../python3/python-func-object.html" title="Python object() 函数">Python object()...</a>
      </dd>
              <dd>
       &middot;
      <a href="../python3/python-ai-draw.html" title="Python AI 绘画">Python AI 绘画</a>
      </dd>
              <dd>
       &middot;
      <a href="../w3cnote/cursor-editor.html" title="神辅助 Cursor 编辑器，加入 GPT-4 让编码更轻松！">神辅助 Cursor ...</a>
      </dd>
             </dl>
     <dl>
      <dt>
       站点信息
      </dt>
      <dd>
       &middot;
       <a target="_blank" href="mailto:admin@runoob.com" rel="external nofollow">意见反馈</a>
       </dd>
      <dd>
       &middot;
      <a target="_blank" href="../disclaimer">免责声明</a>
       </dd>
      <dd>
       &middot;
       <a target="_blank" href="../aboutus">关于我们</a>
       </dd>
      <dd>
       &middot;
      <a target="_blank" href="../archives">文章归档</a>
      </dd>
    
     </dl>
    
     <div class="search-share">
      <div class="app-download">
        <div>
         <strong>关注微信</strong>
        </div>
      </div>
      <div class="share">
      <img width="128" height="128" src="/wp-content/themes/runoob/assets/images/qrcode.png" />
       </div>
     </div>
     
    </div>
   </div>
   <div class="w-1000 copyright">
     Copyright &copy; 2013-2023    <strong><a href="../" target="_blank">菜鸟教程</a></strong>&nbsp;
    <strong><a href="../" target="_blank">runoob.com</a></strong> All Rights Reserved. 备案号：<a target="_blank" rel="nofollow" href="https://beian.miit.gov.cn/">闽ICP备15012807号-1</a>
   </div>
  </div>
  <div class="fixed-btn">
    <a class="go-top" href="javascript:void(0)" title="返回顶部"> <i class="fa fa-angle-up"></i></a>
    <a class="qrcode"  href="javascript:void(0)" title="关注我们"><i class="fa fa-qrcode"></i></a>
    <a class="writer" style="display:none" href="javascript:void(0)"   title="标记/收藏"><i class="fa fa-star" aria-hidden="true"></i></a>
    <!-- qrcode modal -->
    <div id="bottom-qrcode" class="modal panel-modal hide fade in">
      <h4>微信关注</h4>
      <div class="panel-body"><img alt="微信关注" width="128" height="128" src="/wp-content/themes/runoob/assets/images/qrcode.png"></div> 
    </div>
  </div>

 <div style="display:none;">
<script async src="https://www.googletagmanager.com/gtag/js?id=UA-84264393-2"></script>
<script>
  window.dataLayer = window.dataLayer || [];
  function gtag(){dataLayer.push(arguments);}
  gtag('js', new Date());

  gtag('config', 'UA-84264393-2');
</script>
<script>
var _hmt = _hmt || [];
(function() {
  var hm = document.createElement("script");
  hm.src = "https://hm.baidu.com/hm.js?3eec0b7da6548cf07db3bc477ea905ee";
  var s = document.getElementsByTagName("script")[0]; 
  s.parentNode.insertBefore(hm, s);
})();
</script>

</div>
<script>
window.jsui={
    www: 'https://www.runoob.com',
    uri: 'https://www.runoob.com/wp-content/themes/runoob'
};
</script>

<script src=""></script>
<script src=""></script>

</body>
</html>